// 对于axios进行二次封装
import axios from "axios";
// 引入进度条
import nprogress from 'nprogress';
// console.log(nprogress);
// 引入进度条样式
import "nprogress/nprogress.css"

import store from "@/store";
// start:进度条开始   ---  done：进度条结束

// 1、利用axios对象的方法create ，创建一个axios实例
// 2、myrequest 就是axios，只不过稍微配置一下
const myrequest=axios.create({
    // 配置对象
    // 基础路径，发起请求的时候，路径当中就会出现api
    baseURL:'http://gmall-h5-api.atguigu.cn/api',
    // baseURL:"/api",
    // 代表请求超时
    timeout:5000,    
})

// 请求拦截器：在发起请求之前，请求拦截器可以监测到，可以在请求前做一些事情
myrequest.interceptors.request.use((config)=>{
    if(store.state.detail.uuid_token){
        // 请求头添加一个字段（userTempId）：和后台想匹配
        config.headers.userTempId=store.state.detail.uuid_token
    };
    if(store.state.user.token){
        config.headers.token=store.state.user.token;
    }

    // config：配置对象，对象里面有一个属性很重要，headers请求头
    nprogress.start();  //进度条开始动
    // nprogress.set(0.4); //百分比：通过设置progress的百分比，调用 .set(n)来控制进度，其中n的取值范围为0-1
    nprogress.inc();    //递增：要让进度条增加，只要调用 .inc()。这会产生一个随机增量
    return config;
})
// 响应拦截器
myrequest.interceptors.response.use((res)=>{
    // console.log("res...",res.data);
    // 成功的回调函数
    nprogress.done(true);   //进度条结束   --- // 强制完成：通过传递 true 参数给done()，使进度条满格，即使它没有被显示。
    return res.data;
},(err)=>{
    // // 响应失败的回调函数
    // return Promise.reject(new Error('faile'))
    //温馨提示:某一天发请求,请求失败,请求失败的信息打印出来
    alert(err.message);
    //终止Promise链
    return new Promise();
})

// 对外暴露
export default myrequest;